import { Ref } from 'vue';

/**
 * 使用Vue的provide/inject特性，在多个组件之间共享状态。
 * @param getData - 获取数据的函数，会定期执行以刷新数据。
 */
export default (getData: () => void) => {
  // 从父组件注入的状态
  const showState = inject('showState') as { isShow: Ref<boolean> };
  
  // 定义一个计时器
  let timer: NodeJS.Timeout | null = null;
  
  // 在组件挂载时开始一个定时器，定期执行getData函数
  onMounted(() => {
    // 定义延迟时间（20秒）
    const DELAYTIME = 20000;
    timer = setInterval(() => {
      // 只有当isShow状态为true时才执行getData
      if (showState.isShow.value) {
        getData();
      }
    }, DELAYTIME);
  });
  
  // 在组件卸载前清除定时器
  onBeforeUnmount(() => {
    timer && clearInterval(timer);
  });
};
